package com.zzyl.service;

import com.zzyl.base.PageResponse;
import com.zzyl.dto.PendingTasksDto;
import com.zzyl.entity.PendingTasks;
import com.zzyl.entity.User;

import java.util.Map;

public interface ActFlowCommService {
    /**
     * 启动流程实例
     * @param id 入住表的主键id,业务key需要它去组装
     * @param processDefinitionKey checkIn
     * @param user 当前用户
     * @param map 流程变量
     * @param autoFinished 是否自动完成
     */
    void start(Long id, String processDefinitionKey, User user, Map<String, Object> map, boolean autoFinished);

    /**
     * 获取下一个审核人id
     * @param processDefinitionKey
     * @param businessKey
     * @return
     */
    public Long getNextAssignee(String processDefinitionKey, String businessKey);

    PageResponse<PendingTasks> myTaskList(PendingTasksDto dto);

    Integer isCurrentUserAndStep(String taskId, Integer flowStatus,Integer dbFlowStatus);

    /**
     * 完成流程
     * @param title 标题
     * @param taskId 任务ID
     * @param userId 当前用户ID
     * @param code ops  1:同意  2:拒绝  3:驳回
     * @param status 审核状态  1:申请中  2:已完成  3:已结束
     */
    void completeProcess(String title,String taskId,String userId,Integer code,Integer status);


    /**
     * 撤回任务
     *
     * @param taskId
     * @param first  是否默认退回流程第一个节点，true 是,false默认是上一个节点，
     */
    public void withdrawTask(String taskId, boolean first);

    /**
     * 关闭流程 (删除流程实例)
     * @param taskId 任务ID
     * @param code 审核状态 1:申请中  2:已完成  3:已结束
     */
    void closeProcess(String taskId, Integer code);

    void rollBackTask(String taskId, boolean b);
}
